<?php
/*
	学生考试数据模型
*/
class exam_model extends WL_Model{
	public function __construct(){
		parent::__construct();
	}
	
	/**
	 * 通过学号查询学生
	 * @param $sid int 学号
	 * @return array/false
	 */
	public function get_user_by_sid( $sid ){

		return $this->db->get_where( 'student', array( 'sid'=>$sid ) )->row_array();
	}
	
	/**
	 * 查询某个考场的所有考生及其考卷信息
	 * @param $cid int 班级编号
	 * @return array/bool
	 * */
	public function get_examinees( $cid ){
		
		return $this->db->select( 'student.sid,sname,select_time,handin_time,ip,login_time,remark' )->from( 'student' )->where( 'cid', $cid )
						->join( 'test_paper', 'student.sid=test_paper.sid', 'left' )
						->get()->result_array();
	}
	
	/**
	 * 查询所有班级
	 * */
	public function get_all_class(){
		
		return $this->get_field( 'class', '*', 'cid' )->result();
	}
	/**
	 * 通过班级号查班级信息
	 * @param int $cid 班级id
	 * @return array/false
	 * */
	public function get_class_by_cid( $cid ){
		
		return $this->db->get_where( 'class', array( 'cid'=>(int)$cid ) )->row_array();
	}
	
	/**
	 * 查询所有考试场次
	 * */
	public function get_all_exam(){
		
		return $this->db->select("*")->from( 'exam' )
					->join( 'class', 'class.cid = exam.class' )
					->get()->result_array();
	}
	/**
	 * 通过条件获取考场信息
	 * @param $field string 字段名
	 * @param $val string 取值条件 
	 * @return array/false
	 * */
	public function get_exam( $field, $val ){
		
		return $this->db->select("*")->from( 'exam' )->join( 'class', 'class.cid = exam.class' )->where( $field, $val )->get()->result_array();
	}

	/**
	 * 添加考试场次
	 * @param $arr array 包含class和time的数组
	 * @return bool
	 * */
	public function add_exam( $arr ){
		
		return $this->db->insert( 'exam', $arr );
	}
	/**
	 * 修改考试场次信息
	 * @param $arr array 包含id,class和time的数组
	 * @return bool
	 * */
	public function edit_exam( $arr ){
		
		return $this->db->replace( 'exam', $arr );
	}
	/**
	 * 删除考试场次
	 * @param $id int 考试场次id
	 * @return bool
	 * */
	public function del_exam( $id ){
		
		return $this->db->delete( 'exam', array( 'id'=>$id ) );
	}
	
	/**
	 * 根据考生号查询试卷
	 * @param int sid 学号
	 * @return array/false
	 * */
	public function get_test_paper_by_sid( $sid ){
		
		return $this->db->select('*')->from( 'test_paper' )->where( 'student.sid', $sid )
						->join( 'student', 'test_paper.sid=student.sid' )
						->get()->result_array();
	}
	
	/**
	 * 强制考生重考
	 * @param $sid int 考号
	 * @return bool
	 * */
	public function del_test_paper_by_sid( $sid ){
		
		return $this->db->delete( 'test_paper', array( 'sid'=>$sid ) );
	}
	
	/**
	 * 查询某个难度的所有考题
	 * @param $level 0代表所有，1~4代表不同难度
	 * @return array/false
	 * */
	public function get_q_by_level( $level = 0 ){
		
		$level = (int)$level;
		if( $level == '0' ){
			return $this->get_field('question')->result();
		}else{
			return $this->db->get_where( 'question', array('level'=>$level) )->result_array();
		}
	}
	
	/**
	 * 按id查询考题
	 * @param $q_id 题目id
	 * @return array/false
	 * */
	public function get_q_by_id( $q_id ){
		
		return $this->db->get_where( 'question', array( 'id'=>$q_id ) )->row_array();
	}
	
	/**
	 * 随机抽取某个难度的题目
	 * @param $level 难度
	 * @return int 题目id
	 * */
	public function init_q_by_level( $level ){
		
		$level = (int)$level;
		$q = $this->get_q_by_level( $level );
		$id = rand( 0, count($q) - 1 );
		return $q[ $id ][ 'id' ];
	}
	
	/**
	 * 交卷
	 * @param $sid 交卷学生
	 * */
	public function handin( $sid ){
		return	$this->db->where( 'sid', (int)$sid )->update( 'test_paper', array( 'handin_time'=>date('Y-n-j H:i:s') ) );
	}
	
	/**
	 * 更新考生的考卷信息
	 * @param $sid int 学号
	 * @return bool
	 * */
	public function edit_test_paper( $sid, $data ){
		
		return $this->db->where( 'sid', $sid )->update( 'test_paper', $data );
	}
	
	/**
	 * 完成题目
	 * @param $p int 题目编号，0开始
	 * 
	 * */
	public function done_q( $p ){
		
		$test_paper = $this->get_test_paper_by_sid( sess( 'sid' ) );
		$done = unserialize( $test_paper['done'] );
		$done[ $p ] = 1;
		return $this->db->where( 'sid', sess('sid') )->update( 'test_paper', array( 'done'=>serialize($done) ) );
	}
}

